

package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

import vistas.VProducto;
import modelos.MCategoria;
import modelos.MIngrediente;


public class CProducto implements ActionListener{

    private vistas.VProducto vista;
    private modelos.MProducto modelo;
    private ArrayList <MCategoria> categorias;
    private final ArrayList<modelos.MProducto> productos;
    private ArrayList<MIngrediente> ingredientes;
   
    
    //patron singleton instancia unica
    private static CProducto instancia;

	public static synchronized CProducto getInstancia() {
		if (instancia == null)
			instancia = new CProducto();
		return instancia;
	}
    public CProducto() {
    	super();
        
    	this.vista= new VProducto(this);
        
        modelo= new modelos.MProducto();
        categorias= new MCategoria().listarCategoria();
        productos = new  modelos.MProducto().listarProductos();
        ingredientes= new  MIngrediente().listarIngredientes();
        cargarDescripciones();
        vista.addListener(this);
        
    }
    

    public void mostrar() {
        vista.setVisible(true);
    }


    public void cargarDescripciones(){
        ArrayList<String> descripciones = new ArrayList<String>();
        for (int i = 0; i < ingredientes.size(); i++)
            descripciones.add(ingredientes.get(i).getDescripcion());
        vista.cargarComboIngrediente(descripciones);
        descripciones = new ArrayList<String>();
        for (int i = 0; i < categorias.size(); i++)
            descripciones.add(categorias.get(i).getDescripcion());
        vista.cargarComboCategoria(descripciones);
    }

     public String buscarCodigoProducto(String descripcion){
        for (int i = 0; i < productos.size(); i++)
            if(productos.get(i).getDescripcion().equals(descripcion))
                return productos.get(i).getCodigo();
        return "";
    }

     public String buscarCodigoCategoria(String descripcion){
        for (int i = 0; i < categorias.size(); i++)
            if(categorias.get(i).getDescripcion().equals(descripcion))
                return categorias.get(i).getCodigo();
        return "";
     }
     
     public String buscarCodigoIngrediente(String descripcion){
        for (int i = 0; i < ingredientes.size(); i++)
            if(ingredientes.get(i).getDescripcion().equals(descripcion))
                return ingredientes.get(i).getCodigo();
        return "";
     }


     public void actionPerformed(ActionEvent ae) {
        if(ae.getActionCommand().equals("Registrar")){
                registrar();

        }
        else if(ae.getActionCommand().equals("Salir")){
            vista.setVisible(false);
            vista.reiniciar();
        }
        else if(ae.getActionCommand().equals("Agregar")){
            if(validarCantidad())
                vista.agregarFila(vista.getRegistro());
        }
        else if(ae.getActionCommand().equals("Quitar")){
            vista.quitar();
        }
        else{
            vista.reiniciar();
        }
    }

   public boolean validarCamposVacios(ArrayList<JTextField> a){
        for (JTextField texto : a) {
            if(texto.getText().equals("")){
                JOptionPane.showMessageDialog(new JFrame(),"Campos vacios","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
        }
        return true;
    }

   public boolean validarCantidad(){
        if(vista.getCantidad()<=0){
                JOptionPane.showMessageDialog(new JFrame(),"Cantidad no permitida","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

        return true;
    }

    public boolean validarCamposNumericos(){
    try{
           if(Double.parseDouble(vista.getTxtPrecio().getText())<=0){
                vista.getTxtPrecio().setText("");
                JOptionPane.showMessageDialog(new JFrame(),"El precio no es valido","Guaro Burguer",JOptionPane.WARNING_MESSAGE);
                return false;
           }
       }catch(NumberFormatException ex){
           JOptionPane.showMessageDialog(new JFrame(),"Debe ingresar valores numericos","Guaro Burguer",JOptionPane.WARNING_MESSAGE);
           return false;
       }
    return true;
    }


      private void registrar() {
          if(validarCamposVacios(vista.getTextos()) && validarCamposNumericos()){
            modelo.setCodigo(vista.getTxtCodigo().getText());
            modelo.setDescripcion(vista.getTxtDescripcion().getText());
            modelo.setStatus("A");
            modelo.setPrecio(Float.parseFloat(vista.getTxtPrecio().getText()));
            modelo.setCod_categoria(buscarCodigoCategoria(vista.getTextoCmbCategoria()));
            if(modelo.registrarProducto()){
                ArrayList<String> c = new ArrayList<String>();
                ArrayList<Float> p = new ArrayList<Float>();
                ArrayList<String []> f= vista.getInfoTabla();
                for (String[] s : f) {
                    c.add(buscarCodigoIngrediente(s[0]));
                    p.add(Float.parseFloat(s[1]));
                }
                modelo.registrarIngredientes(c, p);
                vista.reiniciar();
                JOptionPane.showMessageDialog(new JFrame(),"Producto registrado exitosamente","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
           vista.reiniciar();
       }
       else
           JOptionPane.showMessageDialog(new JFrame(),"El codigo ya se encuentra registrada","Guaro Burguer",JOptionPane.INFORMATION_MESSAGE);
}

    }
    

}
